#!

use warnings;
use strict;

# all objects are represented by hashes


package Inventory_item; # the definition of a class, a specific namespace
sub new
{
    my ($class) = shift; # the first default parameter is the package name
    print "class:$class\n";

# bless
# bless REF,CLASSNAME 
# bless REF 

# This function tells the thingy referenced by REF that it is now an
# object in the CLASSNAME package. If CLASSNAME is omitted, the
# current package is used. Because a bless is often the last thing in
# a constructor, it returns the reference for convenience. Always use
# the two-argument version if the function doing the blessing might be
# inherited by a derived class. See perltoot and perlobj for more
# about the blessing (and blessings) of objects.

# Consider always blessing objects in CLASSNAMEs that are mixed
# case. Namespaces with all lowercase names are considered reserved
# for Perl pragmata. Builtin types have all uppercase names, so to
# prevent confusion, you may wish to avoid such package names as
# well. Make sure that CLASSNAME is a true value.

    bless    
    {
        "PART_NUM" => "10",
        "QTY_ON_HAND" => "ok"
    };
    sub test_method
    {
        my $self = shift;
        print shift;
        print "this method outputs\n";
        my ($key,$value);
        while(($key,$value)=each(%$self))
        {
            print "$key:$value\n";
        }
    }
}

package main;

my $item = Inventory_item->new("oooo");
print $item->{PART_NUM};
$item->test_method("xixi...");
